why do header files exist